package com.example.object_oriented.override_overload;

import org.junit.Test;

/**
 *
 * 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变，核心重写！
 * 重写的好处在于子类可以根据需要，定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法
 * 声明为 final 的方法不能被重写。
 * 声明为 static 的方法不能被重写，但是能够被再次声明。
 * @author readpage
 * @date 2023-01-05 11:44
 */

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}

/**
 * Super关键字的使用: 当需要在子类中调用父类的被重写方法时，要使用 super 关键字。
 */
class Dog extends Animal {
    public void move() {
        super.move(); // 应用super类的方法
        System.out.println("狗可以跑和走");
    }

    public void bark() {
        System.out.println("狗可以吠叫");
    }
}

public class TestDog {
    public static void main(String[] args) {
        Animal a = new Animal(); // Animal 对象
        Animal d = new Dog(); // Dog 对象

        a.move();// 执行 Animal 类的方法
        d.move();//执行 Dog 类的方法
//        d.bark(); // d的引用类型Animal没有bark方法。
    }

    @Test
    public void test() {
        Animal a = new Dog();  // Dog对象
        a.move(); //执行 Dog类的方法
    }
}
